#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
#include<string.h>
#include<sys/wait.h>
#include<sys/types.h>

int main()
{
  pid_t id = fork();
  if(id<0)
  {
    //失败
    perror("fork");
    exit(1);//标识进程运行完毕，结果不正确
  }
  else if(id==0)
  {
    //子进程
    int cnt=5;
    while(cnt)
    {
      printf("cnt: %d, 我是子进程, pid: %d, ppid: %d\n",cnt,getpid(),getppid());
      sleep(1);
      cnt--;
    }
    exit(0);
  }
  else 
  {
    //父进程
    printf("我是父进程, pid: %d, ppid: %d\n",getpid(),getppid());
    //pid_t ret=wait(NULL);//阻塞式的等待，等到子进程才继续向下
    pid_t ret=waitpid(id,NULL,0);//阻塞式的等待，等到子进程才继续向下
    if(ret>0)
    {
      printf("等待子进程成功，ret: %d\n",ret);
    }
    //以下代码没有意义，只是为了对比演示
   
    while(1)
    {
      printf("我是父进程, pid: %d, ppid: %d\n",getpid(),getppid());
      sleep(1);
    }
  }
}
